#ifndef _BUZZ_APP_H_
#define _BUZZ_APP_H_

#include "buzz_board.h"

#if _VOICE_PLAY_TYPE_ == _VOICE_PLAY_BUZZ_
// 间隔周期             - 1000ms
#define BUZZ_NEXT_PLAY_CYCLE                                 (1000ul)
// 长延时               - 2s
#define BUZZ_LONG_DELAY_TIME                                 (2000ul)
// 高等提示翻转周期      - 800ms
#define BUZZ_STRONG_PROMPTING_FLASHING_PERIOD                (800ul)
// 中等提示翻转周期      - 250ms
#define BUZZ_MEDIUM_FLASHING_PERIOD                          (250ul)
// 低等提示翻转周期      - 150ms
#define BUZZ_WEAK_CUE_FLASHING_PERIOD                        (150ul)

// 持续闪烁标识
#define BUZZ_CONSTANT_FLASHING_LIGHT                         PROTOCOL_DUMMY_CODING

/**
 * @brief LED 闪烁次数
 * 
 */
typedef enum
{
  BUZZ_PLAY_LOCKED_COUNT                      = 0x02, // 反锁
  BUZZ_PLAY_KEY_TONE_COUNT                    = 0x01, // 按键音
  BUZZ_PLAY_LOW_POWER_COUNT                   = 0x06, // 低电压
  BUZZ_PLAY_SET_ERROR_COUNT                   = 0x01, // 设置失败
  BUZZ_PLAY_FALSE_LOCK_COUNT                  = 0x06, // 假锁
  BUZZ_PLAY_TIME_ERROR_COUNT                  = 0x01, // 时间错误
  BUZZ_PLAY_DEVICE_BUSY_COUNT                 = 0x01, // 设备繁忙
  BUZZ_PLAY_SET_SUCCESS_COUNT                 = 0x03, // 设置成功
  BUZZ_PLAY_DOOR_UNLOCK_COUNT                 = 0x01, // 鉴权成功
  BUZZ_PLAY_KEY_INSERTED_COUNT                = 0x02, // 钥匙插入
  BUZZ_PLAY_CARD_REPLACE_COUNT                = 0x0A, // 卡片已经被顶替
  BUZZ_PLAY_CONNECT_TEST_COUNT                = 0x0A, // 连接测试
  BUZZ_PLAY_SYSTEM_LOCKED_COUNT               = 0x01, // 提示锁保护
  BUZZ_PLAY_LOCAL_REGISTER_COUNT              = 0x01, // 本地注册
  BUZZ_PLAY_REGISTER_ERROR_COUNT              = 0x03, // 注册失败
  BUZZ_PLAY_SYSTEM_POWERUP_COUNT              = 0x02, // 系统上电
  BUZZ_PLAY_SELF_TEST_ERROR_COUNT             = 0x02, // 设备自检失败
  BUZZ_PLAY_DEVICE_ACTIVATED_COUNT            = 0x01, // 设备已激活
  BUZZ_PLAY_REGISTER_SUCCESS_COUNT            = 0x04, // 注册成功
  BUZZ_PLAY_SYSTEM_INITIALIZE_COUNT           = 0x08, // 系统初始化状态
  BUZZ_PLAY_CARD_REPORTED_LOST_COUNT          = 0x04, // 卡片已挂失
  BUZZ_PLAY_ANTI_BREAKING_ALARM_COUNT         = 0x06, // 防撬警报
  BUZZ_PLAY_EXPIRES_LICENSE_CODE_COUNT        = 0x0B, // 授权码过期
  BUZZ_PLAY_CAED_AFFILIATION_ERROR_COUNT      = 0x03, // 卡片附属错误
  BUZZ_PLAY_FUNCTION_CARD_DISABLED_COUNT      = 0x08, // 功能卡未启用
  BUZZ_PLAY_INSUFFICIENT_PRIVILEGES_COUNT     = 0x06, // 权限不足
  BUZZ_PLAY_NETWORK_ATTACHMENT_ERROR_COUNT    = 0x03, // 网络附着失败
} BuzzNumberOfPlay_t;

/**
 * @brief 系统提示
 *
 */
typedef enum
{
  BUZZ_PLAY_LOCKED,                     // 反锁
  BUZZ_PLAY_KEY_TONE,                   // 按键音
  BUZZ_PLAY_LOW_POWER,                  // 低电量
  BUZZ_PLAY_SET_ERROR,                  // 设置失败
  BUZZ_PLAY_FALSE_LOCK,                 // 假锁
  BUZZ_PLAY_TIME_ERROR,                 // 时间错误
  BUZZ_PLAY_DEVICE_BUSY,                // 设备繁忙
  BUZZ_PLAY_SET_SUCCESS,                // 设置成功
  BUZZ_PLAY_DOOR_UNLOCK,                // 开锁
  BUZZ_PLAY_KEY_INSERTED,               // 钥匙插入
  BUZZ_PLAY_CARD_REPLACE,               // 卡片已经被顶替
  BUZZ_PLAY_CONNECT_TEST,               // 连接测试
  BUZZ_PLAY_SYSTEM_LOCKED,              // 系统上锁
  BUZZ_PLAY_LOCAL_REGISTER,             // 本地注册用户
  BUZZ_PLAY_REGISTER_ERROR,             // 注册用户失败
  BUZZ_PLAY_SYSTEM_POWERUP,             // 系统上电
  BUZZ_PLAY_SELF_TEST_ERROR,            // 设备自检失败
  BUZZ_PLAY_DEVICE_ACTIVATED,           // 设备已激活
  BUZZ_PLAY_REGISTER_SUCCESS,           // 注册用户成功
  BUZZ_PLAY_SYSTEM_INITIALIZE,          // 系统初始化状态
  BUZZ_PLAY_CARD_REPORTED_LOST,         // 卡片已挂失
  BUZZ_PLAY_SET_PARAMETER_ERROR,        // 设置参数失败
  BUZZ_PLAY_ANTI_BREAKING_ALARM,        // 防撬警报
  BUZZ_PLAY_EXPIRES_LICENSE_CODE,       // 授权码过期
  BUZZ_PLAY_CAED_AFFILIATION_ERROR,     // 卡片附属错误
  BUZZ_PLAY_FUNCTION_CARD_DISABLED,     // 功能卡未启用
  BUZZ_PLAY_INSUFFICIENT_PRIVILEGES,    // 权限不足
  BUZZ_PLAY_NETWORK_ATTACHMENT_ERROR,   // 网络附着失败
} BuzzHintMode_t;

/**
 * @brief 蜂鸣器状态
 *
 */
typedef enum
{
  BUZZ_HARDWARE_IDLE,  // 空闲
  BUZZ_HARDWARE_STOP,  // 停止
  BUZZ_HARDWARE_ALARM, // 提示
} BuzzExecuteStatus_t;

/**
 * @brief 蜂鸣器状态位
 *
 */
typedef struct
{
  uint8_t HintCount;                 // 提示次数
  BuzzHintMode_t HintMode;           // 闪烁模式
  BuzzExecuteStatus_t ExecuteStatus; // 执行状态
} BuzzStatusBit_t;

/**
 * @brief 播放设备已反锁音频
 *
 */
extern void BuzzPlayDeviceLockedAudio(void);

/**
 * @brief 播放按键音音频
 *
 */
extern void BuzzPlayKeyToneAudio(void);

/**
 * @brief 播放低电压音频
 *
 */
extern void BuzzPlayLowPowerAudio(void);

/**
 * @brief 播放设置音量失败音频
 *
 */
extern void BuzzPlaySetParameterFailureAudio(void);

/**
 * @brief 播放时间错误音频
 *
 */
extern void BuzzPlayTimeErrorAudio(void);

/**
 * @brief 播放假锁音频
 *
 */
extern void BuzzPlayFalseLockAudio(void);

/**
 * @brief 播放设备繁忙音频
 *
 */
extern void BuzzPlayDeviceBusyAudio(void);

/**
 * @brief 播放设置成功音频
 *
 */
extern void BuzzPlaySetSuccessAudio(void);

/**
 * @brief 播放门锁动作音频
 *
 */
extern void BuzzPlayDoorActionAudio(void);

/**
 * @brief 播放钥匙移除音频
 *
 */
extern void BuzzPlayKeyRemoveAudio(void);

/**
 * @brief 播放钥匙插入音频
 *
 */
extern void BuzzPlayKeyInsertAudio(void);

/**
 * @brief 播放卡片已经被顶替音频
 *
 */
extern void BuzzPlayCardReplaceAudio(void);

/**
 * @brief 播放连接测试音频
 *
 */
extern void BuzzPlayConnectTestAudio(void);

/**
 * @brief 播放系统上锁音频
 *
 */
extern void BuzzPlaySystemLockedAudio(void);

/**
 * @brief 播放本地注册音频
 */
extern void BuzzPlayLocalRegisterAudio(void);

/**
 * @brief 播放注册失败音频
 *
 */
extern void BuzzPlayRegisterErrorAudio(void);

/**
 * @brief 播放系统上电音频
 *
 */
extern void BuzzPlaySystemPowerupAudio(void);

/**
 * @brief 播放设备自检错误音频
 *
 * @param ErrorCode - 错误码
 */
extern void BuzzPlaySelfTestErrorAudio(uint8_t ErrorCode);

/**
 * @brief 播放设备已激活音频
 *
 */
extern void BuzzPlayDeviceActivatedAudio(void);

/**
 * @brief 播放注册成功音频
 *
 */
extern void BuzzPlayRegisterSuccessAudio(void);

/**
 * @brief 播放系统初始化音频
 *
 */
extern void BuzzPlaySystemInitializeAudio(void);

/**
 * @brief 播放卡片已挂失音频
 *
 */
extern void BuzzPlayCardReportedLostAudio(void);

/**
 * @brief 播放设置参数失败音频
 *
 */
extern void BuzzPlaySetParameterErrorAudio(void);

/**
 * @brief 播放防撬警报音频
 *
 */
extern void BuzzPlayAntiBreakingAlarmAudio(void);

/**
 * @brief 播放授权码过期音频
 *
 */
extern void BuzzPlayExpiresLicenseCodeAudio(void);

/**
 * @brief 播放卡片附属错误音频
 *
 */
extern void BuzzPlayCardAffiliationErrorAudio(void);

/**
 * @brief 播放功能卡未启用音频
 *
 */
extern void BuzzPlayThisFunctionCardHasBeenDisabledAudio(void);

/**
 * @brief 播放权限不足音频
 *
 */
extern void BuzzPlayInsufficientPrivilegesAudio(void);

/**
 * @brief 播放网络附着失败音频
 *
 */
extern void BuzzPlayNetworkAttachmentErrorAudio(void);

/**
 * @brief 蜂鸣器功能初始化
 *
 */
extern void BuzzConfiguration(void);

#endif
#endif
